package com.estore.service;

import com.estore.model.Product;

import java.util.*;

/**
 * 商品服务类，负责商品相关的业务逻辑
 * 目前使用内存Map模拟数据库
 */
public class ProductService {

    // 使用Map存储商品数据，key是商品ID，value是商品对象
    // 优点：通过ID查找商品时，时间复杂度是O(1)，非常高效
    private final Map<String, Product> productData = new HashMap<>();

    /**
     * 构造函数，初始化一些商品数据
     */
    public ProductService() {

        Set<String> tag1=new HashSet<String>();
        tag1.add("高价");
        tag1.add("畅销");
        Set<String> tag2=new HashSet<String>();
        tag2.add("低价");
        tag2.add("骑马最讨厌的");
        Set<String> tag3=new HashSet<String>();
        tag3.add("高价");
        tag3.add("高价");

        productData.put("p001", new Product("p001", "Java从入门到精通", 99.0, 100, tag3));
        productData.put("p002", new Product("p002", "高性能MySQL", 128.5, 50));
        productData.put("p003", new Product("p003", "颈椎康复指南", 45.0, 200));
        productData.put("p004", new Product("p004", "生发秘籍", 88.0, 0)); // 库存为0的商品
        productData.put("p005", new Product("p005", "C++从入门到精通", 69.0, 30));
        productData.put("p006", new Product("p006", "QT从入门到精通", 100.0, 100));
        productData.put("p007", new Product("p007", "Python从入门到精通", 59.0, 100, tag1));
        productData.put("p008", new Product("p008", "C从入门到精通", 49.0, 100,tag2));
    }

    /**
     * 获取所有商品列表
     * @return 商品列表
     */
    public List<Product> getAllProducts() {
        // 从Map的值集合创建一个新的ArrayList并返回
        return new ArrayList<>(productData.values());
    }

    /**
     * 根据ID查找商品
     * @param id 商品ID
     * @return 找到的商品对象，如果不存在则返回null
     */
    public Product findProductById(String id) {
        return productData.get(id);
    }
    
    /**
     * 按价格排序商品列表
     * @param ascending true表示升序，false表示降序
     * @return 排序后的商品列表
     */
    public List<Product> getProductsSortedByPrice(boolean ascending) {
        List<Product> products = new ArrayList<>(productData.values());
        if (ascending) {
            products.sort(Comparator.comparingDouble(Product::getPrice));
        } else {
            products.sort(Comparator.comparingDouble(Product::getPrice).reversed());
        }
        return products;
    }
    
    /**
     * 按库存排序商品列表
     * @param ascending true表示升序，false表示降序
     * @return 排序后的商品列表
     */
    public List<Product> getProductsSortedByStock(boolean ascending) {
        List<Product> products = new ArrayList<>(productData.values());
        if (ascending) {
            products.sort(Comparator.comparingInt(Product::getStock));
        } else {
            products.sort(Comparator.comparingInt(Product::getStock).reversed());
        }
        return products;
    }
}